home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / gnustuff / tos / progut~1 / gperf.zoo / tests / expout.1 < prev    next >
Encoding:
Text File  |  1991-09-25  |  4.1 KB  |  142 lines

  1. /* starting time is 23:41:14 */
  2. /* C code produced by gperf version 2.5 (GNU C++ version) */
  3. /* Command-line: ../gperf -p -j1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gpf  */
  4. /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
  5. struct resword { char *name; short token; enum rid rid; };
  6.  
  7. #define TOTAL_KEYWORDS 51
  8. #define MIN_WORD_LENGTH 2
  9. #define MAX_WORD_LENGTH 13
  10. #define MIN_HASH_VALUE 8
  11. #define MAX_HASH_VALUE 82
  12. /* maximum key range = 75, duplicates = 0 */
  13.  
  14. #ifdef __GNUC__
  15. inline
  16. #endif
  17. static unsigned int
  18. hash (str, len)
  19.      register char *str;
  20.      register int unsigned len;
  21. {
  22.   static unsigned char asso_values[] =
  23.     {
  24.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  25.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  26.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  27.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  28.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  29.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  30.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  31.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  32.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  33.      83, 83, 83, 83, 83,  0, 83,  1,  2, 34,
  34.      19,  6, 11, 29,  0, 17, 83,  0, 23, 28,
  35.      26, 30, 31, 83, 15,  1,  0, 28, 13,  4,
  36.      83, 83,  5, 83, 83, 83, 83, 83,
  37.     };
  38.   register int hval = len;
  39.  
  40.   switch (hval)
  41.     {
  42.       default:
  43.       case 3:
  44.         hval += asso_values[str[2]];
  45.       case 2:
  46.       case 1:
  47.         hval += asso_values[str[0]];
  48.     }
  49.   return hval + asso_values[str[len - 1]];
  50. }
  51.  
  52. #ifdef __GNUC__
  53. inline
  54. #endif
  55. struct resword *
  56. is_reserved_word (str, len)
  57.      register char *str;
  58.      register unsigned int len;
  59. {
  60.   static struct resword wordlist[] =
  61.     {
  62.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  63.       {"__asm__",  ASM, NORID},
  64.       {"",}, 
  65.       {"__typeof__",  TYPEOF, NORID},
  66.       {"__signed__",  TYPESPEC, RID_SIGNED},
  67.       {"__alignof__",  ALIGNOF, NORID},
  68.       {"break",  BREAK, NORID},
  69.       {"__attribute__",  ATTRIBUTE, NORID},
  70.       {"",}, {"",}, 
  71.       {"else",  ELSE, NORID},
  72.       {"__attribute",  ATTRIBUTE, NORID},
  73.       {"__typeof",  TYPEOF, NORID},
  74.       {"int",  TYPESPEC, RID_INT},
  75.       {"__alignof",  ALIGNOF, NORID},
  76.       {"struct",  STRUCT, NORID},
  77.       {"sizeof",  SIZEOF, NORID},
  78.       {"switch",  SWITCH, NORID},
  79.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
  80.       {"",}, 
  81.       {"__inline__",  SCSPEC, RID_INLINE},
  82.       {"__signed",  TYPESPEC, RID_SIGNED},
  83.       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
  84.       {"if",  IF, NORID},
  85.       {"__inline",  SCSPEC, RID_INLINE},
  86.       {"while",  WHILE, NORID},
  87.       {"",}, 
  88.       {"__asm",  ASM, NORID},
  89.       {"auto",  SCSPEC, RID_AUTO},
  90.       {"short",  TYPESPEC, RID_SHORT},
  91.       {"default",  DEFAULT, NORID},
  92.       {"extern",  SCSPEC, RID_EXTERN},
  93.       {"",}, {"",}, 
  94.       {"__const",  TYPE_QUAL, RID_CONST},
  95.       {"static",  SCSPEC, RID_STATIC},
  96.       {"__const__",  TYPE_QUAL, RID_CONST},
  97.       {"for",  FOR, NORID},
  98.       {"case",  CASE, NORID},
  99.       {"float",  TYPESPEC, RID_FLOAT},
  100.       {"return",  RETURN, NORID},
  101.       {"typeof",  TYPEOF, NORID},
  102.       {"typedef",  SCSPEC, RID_TYPEDEF},
  103.       {"volatile",  TYPE_QUAL, RID_VOLATILE},
  104.       {"do",  DO, NORID},
  105.       {"inline",  SCSPEC, RID_INLINE},
  106.       {"void",  TYPESPEC, RID_VOID},
  107.       {"char",  TYPESPEC, RID_CHAR},
  108.       {"signed",  TYPESPEC, RID_SIGNED},
  109.       {"unsigned",  TYPESPEC, RID_UNSIGNED},
  110.       {"",}, {"",}, 
  111.       {"double",  TYPESPEC, RID_DOUBLE},
  112.       {"asm",  ASM, NORID},
  113.       {"",}, {"",}, 
  114.       {"goto",  GOTO, NORID},
  115.       {"",}, 
  116.       {"const",  TYPE_QUAL, RID_CONST},
  117.       {"enum",  ENUM, NORID},
  118.       {"register",  SCSPEC, RID_REGISTER},
  119.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  120.       {"continue",  CONTINUE, NORID},
  121.       {"",}, 
  122.       {"union",  UNION, NORID},
  123.       {"",}, {"",}, {"",}, {"",}, {"",}, 
  124.       {"long",  TYPESPEC, RID_LONG},
  125.     };
  126.  
  127.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  128.     {
  129.       register int key = hash (str, len);
  130.  
  131.       if (key <= MAX_HASH_VALUE && key >= 0)
  132.         {
  133.           register char *s = wordlist[key].name;
  134.  
  135.           if (*s == *str && !strcmp (str + 1, s + 1))
  136.             return &wordlist[key];
  137.         }
  138.     }
  139.   return 0;
  140. }
  141. /* ending time is 23:41:14 */
  142.